<commit_before>Definiciones
------------

-   Una clase abstracta es una clase que no tiene instancias. Su utilidad consiste en proveer estructura y comportamiento común a todas las subclases que heredan de ella.

<!-- -->

-   Una interfaz permite especificar un contrato (formado por un conjunto de operaciones). Las clases que adhieren a ese contrato deben implementar esos métodos.

<code>

`/** Implementing this interface allows an object to be the target of`
` *  the "foreach" statement.`
` * @since 1.5`
` */`
`public interface Iterable`<T>` {`
`    /**`
`     * Returns an iterator over a set of elements of type T.`
`     * `
`     * @return an Iterator.`
`     */`
`    Iterator`<T>` iterator();`
`}`

</code> *En este ejemplo las clases que implementen la interfaz Iterable deben definir un método iterator(). La interfaz sólo declara la firma de cada uno de los métodos: nombre, parámetros que recibe, tipo que devuelve y excepciones que puede arrojar*

Comparación
-----------

Tanto la clase abstracta como la interfaz definen un tipo, pero mientras que el objetivo al definir una clase abstracta es reutilizar comportamiento, en la interfaz la idea principal es posibilitar el polimorfismo entre clases que no tienen cosas en común. No es posible definir comportamiento ni atributos para una interfaz.

Recordemos que en la mayoría de las tecnologías se trabaja únicamente con herencia simple (solamente es posible heredar de una única superclase), mientras que una clase puede tener múltiples tipos (implementar diferentes interfaces). Entonces en esos casos donde la herencia es una herramienta rígida, que permite una sola chance para ordenar la jerarquía de objetos, la interfaz puede resultar una alternativa viable.<commit_msg>/* Definiciones */<commit_after>Definiciones
------------

-   Una clase abstracta es una clase que no tiene instancias. Su utilidad consiste en proveer estructura y comportamiento común a todas las subclases que heredan de ella.

<code>

`public abstract class Figura {`
`     public int getPerimetro();`

`}`

</code>

-   Una interfaz permite especificar un contrato (formado por un conjunto de operaciones). Las clases que adhieren a ese contrato deben implementar esos métodos.

<code>

`/** Implementing this interface allows an object to be the target of`
` *  the "foreach" statement.`
` * @since 1.5`
` */`
`public interface Iterable`<T>` {`
`    /**`
`     * Returns an iterator over a set of elements of type T.`
`     * `
`     * @return an Iterator.`
`     */`
`    Iterator`<T>` iterator();`
`}`

</code> ''En este ejemplo las clases que implementen la interfaz Iterable deben definir un método iterator(). Todos los métodos son abstractos, ya que la interfaz sólo declara la firma de cada uno de los métodos: nombre, parámetros que recibe, tipo que devuelve y excepciones que puede arrojar. ''

Comparación
-----------

Tanto la clase abstracta como la interfaz definen un tipo, pero mientras que el objetivo al definir una clase abstracta es reutilizar comportamiento, en la interfaz la idea principal es posibilitar el polimorfismo entre clases que no tienen cosas en común. No es posible definir comportamiento ni atributos para una interfaz.

Recordemos que en la mayoría de las tecnologías se trabaja únicamente con herencia simple (solamente es posible heredar de una única superclase), mientras que una clase puede tener múltiples tipos (implementar diferentes interfaces). Entonces en esos casos donde la herencia es una herramienta rígida, que permite una sola chance para ordenar la jerarquía de objetos, la interfaz puede resultar una alternativa viable.
{'fraction_non_alphanumeric': 0.0746556473829201, 'fraction_numerical': 0.0011019283746556473, 'mean_word_length': 3.9876373626373627, 'pattern_counts': {'":': 0, '<': 14, '<?xml version=': 0, '>': 14, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3739079', 'n_tokens_mistral': 1216, 'n_tokens_neox': 1191, 'n_words': 499}